namespace classifier_test
{

class classifier : public classifier_common
{
public:
	virtual smart_ptr<classifier> clone() const = 0;
	virtual void train(subarray<const record* const> Data) = 0;
	virtual discr_value classify(const record& Record) const;
	virtual void estimate(const record& Record, array<double>& Probs) const = 0;
};

void normalize_probabilities(array<double>& Probs);
void classification_results(classifier* Classifier, subarray<const record* const> Data, vector<discr_value>& Results);
int classification_errors(subarray<const record* const> Data, subarray<discr_value> Results);
double classification_error(subarray<const record* const> Data, subarray<discr_value> Results);
int classification_errors(classifier* Classifier, subarray<const record* const> Data);
double classification_error(classifier* Classifier, subarray<const record* const> Data);
double classification_similarity(subarray<const discr_value> A, subarray<const discr_value> B);

}
